package com.dlz.systemshop.pojo;


import lombok.Data;

/**
 * API响应类，用于封装API调用的结果。
 *
 * @param <T> 响应数据的类型
 */
@Data
public class APIResponse<T> {
    /**
     * 错误码，0表示成功，非0表示失败
     */
    private Integer errno;

    /**
     * 错误信息，当errno不为0时提供详细的错误描述
     */
    private String errmsg;

    /**
     * 响应数据，当errno为0时提供有效的数据
     */
    private T data;

    /**
     * 默认构造方法
     */
    public APIResponse() {
        this.errno = 0; // 默认成功
        this.errmsg = "Success";
    }

    /**
     * 构造方法，用于创建成功的响应
     *
     * @param data 成功时返回的数据
     */
    public APIResponse(T data) {
        this.errno = 0;
        this.errmsg = "Success";
        this.data = data;
    }

    /**
     * 构造方法，用于创建失败的响应
     *
     * @param errno  错误码
     * @param errmsg 错误信息
     */
    public APIResponse(Integer errno, String errmsg) {
        this.errno = errno;
        this.errmsg = errmsg;
    }

    /**
     * 静态方法，用于快速创建成功的响应
     *
     * @param data 成功时返回的数据
     * @param <T>  数据类型
     * @return 成功的APIResponse对象
     */
    public static <T> APIResponse<T> success(T data) {
        return new APIResponse<>(data);
    }

    /**
     * 静态方法，用于快速创建失败的响应
     *
     * @param errno  错误码
     * @param errmsg 错误信息
     * @param <T>    数据类型
     * @return 失败的APIResponse对象
     */
    public static <T> APIResponse<T> error(Integer errno, String errmsg) {
        return new APIResponse<>(errno, errmsg);
    }
}
